﻿using System;
using System.Linq;
using System.Collections.Generic;
using SIM.Geo.DA;
using SIM.Geo.BE;
using System.Data;

namespace SIM.Geo.DA
{
    public class DADetallePerforacion : Base
    {
        #region Metodos
        /// <summary>
        /// Método que devuelve la lista de DetallePerforacion
        /// </summary>
        /// <returns></returns>
        public List<DetallePerforacion> ListarDetallePerforacion(int codigoAvanceDiario)
        {
            return this.Context.DetallePerforacion.Where(x => x.CodigoAvanceDiario == codigoAvanceDiario).ToList();
        }
        /// <summary>
        /// Método para insertar una DetallePerforacion
        /// </summary>
        /// <param name="DetallePerforacion"></param>
        /// <returns></returns>
        public int InsertarDetallePerforacion(DetallePerforacion detallePerforacion)
        {
            this.Context.DetallePerforacion.AddObject(detallePerforacion);
            this.Context.SaveChanges();
            return detallePerforacion.Orden;
        }
        /// <summary>
        /// Método para modificar un DetallePerforacion
        /// </summary>
        /// <param name="DetallePerforacion"></param>
        public void ModificarDetallePerforacion(DetallePerforacion detallePerforacion)
        {
            this.Context.DetallePerforacion.Attach(detallePerforacion);
            this.Context.ObjectStateManager.ChangeObjectState(detallePerforacion, EntityState.Modified);
            this.Context.SaveChanges();
        }
        /// <summary>
        /// Método para eliminar DetallePerforacion
        /// </summary>
        /// <param name="DetallePerforacion"></param>
        public void EliminarDetallePerforacion(DetallePerforacion detallePerforacion)
        {
            this.Context.DetallePerforacion.DeleteObject(detallePerforacion);
            this.Context.SaveChanges();
        }

        /// <summary>
        /// Método que devuelve DetallePerforacion por codigo
        /// </summary>
        /// <param name="codigoDetallePerforacion"></param>
        /// <returns></returns>
        public DetallePerforacion ObtenerDetallePerforacion(int codigoAvanceDiario, int codigoSondaje, int orden)
        {
            return this.Context.DetallePerforacion.Where(x => x.CodigoAvanceDiario.Equals(codigoAvanceDiario) && x.CodigoSondaje.Equals(codigoSondaje) && x.Orden.Equals(orden)).FirstOrDefault();
        }

        /// <summary>
        /// Método que devuelve la lista de DetallePerforacion Por Avance diario
        /// </summary>
        /// <returns></returns>
        public List<buscarDetallePerforacion_Result> BuscarDetallePerforacion(int codigoAvanceDiario, int codigoSondaje)
        {
            return this.Context.buscarDetallePerforacion(codigoAvanceDiario, codigoSondaje).ToList();
        }

        /// <summary>
        /// Método que devuelve la lista de DetallePerforacion Por Avance diario
        /// </summary>
        /// <returns></returns>
        public List<DetallePerforacionResponse> BuscarDetallePerforacion1(int codigoAvanceDiario, int codigoSondaje)
        {
            var lista = this.Context.buscarDetallePerforacion(codigoAvanceDiario, codigoSondaje).ToList();
            var result = lista
                .Select(x => new DetallePerforacionResponse
                {
                    Orden = x.Orden,
                    CodigoAvanceDiario = x.CodigoAvanceDiario,
                    CodigoSondaje = x.CodigoSondaje,
                    Desde = x.Desde,
                    Hasta = x.Hasta,
                    MetrosPerforados = x.MetrosPerforados,
                    MetrosRecuperados = x.MetrosRecuperados,
                    PorcentajeRecuperacion = x.PorcentajeRecuperacion,
                    CodigoProductoCorona = x.CodigoProductoCorona,
                    CodigoProductoEscariador = x.CodigoProductoEscariador,
                    NombreProductoCorona = x.ProductoCorona,
                    NombreProductoEscariador = x.ProductoEscariador
                }
                ).ToList();
            return result;
        }
        #endregion
    }
}
